package config

import (
	"fmt"
	"github.com/fsnotify/fsnotify"
	"github.com/spf13/viper"
)

var GlobalConf Config

/*
配置文件初始化
读取配置文件
使用配置文件，优化相关client
*/

func (s *Config) ConfigSystem(system System) *Config {
	s.System = system
	return s
}

func (s *Config) ConfigMysql(mysql Mysql) *Config {
	s.Mysql = mysql
	return s
}
func (s *Config) ConfigRedis(redis Redis) *Config {
	s.Redis = redis
	return s
}

func (s *Config) ConfigLocal(local Local) *Config {
	s.Local = local
	return s
}

//读取配置文件方式
func InitConfigFromFile(configFilePath string) error {
	var config Config
	v := viper.New()
	v.SetConfigFile(configFilePath)
	err := v.ReadInConfig()
	if err != nil {
		panic(fmt.Errorf("Fatal error config file: %s \n", err))
	}
	v.WatchConfig()

	v.OnConfigChange(func(e fsnotify.Event) {
		fmt.Println("config file changed:", e.Name)
		if err := v.Unmarshal(&config); err != nil {
			fmt.Println(err)
		}
	})

	if err := v.Unmarshal(&config); err != nil {
		fmt.Println(err)
		return err
	}
	GlobalConf = config
	return nil
}
